//按符号重排数组
/*给你一个下标从 0 开始的整数数组 nums ，数组长度为 偶数 ，由数目 相等 的正整数和负整数组成。

你需要返回满足下述条件的数组 nums：

任意 连续 的两个整数 符号相反
对于符号相同的所有整数，保留 它们在 nums 中的 顺序 。
重排后数组以正整数开头。
重排元素满足上述条件后，返回修改后的数组。
*/
class Solution {
public:
    vector<int> rearrangeArray(vector<int>& nums) {
        vector<int> pos;
        vector<int> nga;
        for (auto& num : nums) {
            if (num < 0)
                nga.push_back(num);
            else
                pos.push_back(num);
        }
        int n_index = 0, p_index = 0;
        for (int i = 0; i < nums.size(); i++) {
            if (i % 2==0) {
                nums[i] = pos[p_index++];
            } else {
                nums[i] = nga[n_index++];
            }
        }
        return nums;
    }
};


//最大二进制奇数
/*给你一个 二进制 字符串 s ，其中至少包含一个 '1' 。

你必须按某种方式 重新排列 字符串中的位，使得到的二进制数字是可以由该组合生成的 最大二进制奇数 。

以字符串形式，表示并返回可以由给定组合生成的最大二进制奇数。

注意 返回的结果字符串 可以 含前导零。*/
class Solution {
public:
    string maximumOddBinaryNumber(string s) {
        int one_count = 0;
        for (auto& c : s) {
            if (c == '1')
                one_count++;
        }
        string ret;
       // if (s[s.size() - 1] == '0')
            one_count--;
        int temp = 0;
        for (int i = 0; i < s.size(); i++) {
            if (temp < one_count) {
                ret += '1';
                temp++;
            } else
                ret += '0';
        }
        ret[ret.size() - 1] = '1';
        return ret;
    }
};